wayland: Support setting cursors
authorKristian Høgsberg <krh@bitplanet.net>
Wed, 9 Feb 2011 19:48:29 +0000 (14:48 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 9 Feb 2011 19:48:31 +0000 (14:48 -0500)
And a handful unrelated cleanups.  Still doesn't really have an answer
for cursor themes.

14 files changed:
configure.ac
gdk/wayland/Makefile.am
gdk/wayland/gdkcursor-wayland.c
gdk/wayland/gdkdevice-wayland.c
gdk/wayland/gdkdevice-wayland.h
gdk/wayland/gdkdevicemanager-wayland.c
gdk/wayland/gdkdisplay-wayland.c
gdk/wayland/gdkdisplay-wayland.h
gdk/wayland/gdkeventsource.c
gdk/wayland/gdkeventsource.h [deleted file]
gdk/wayland/gdkprivate-wayland.h
gdk/wayland/gdkscreen-wayland.c
gdk/wayland/gdkwindow-wayland.c
gdk/wayland/gdkwindow-wayland.h

index d33aeec6c2bec6e8ee4941445e723274afc90122..1b13ba39424ef6b55cea935d505d3657c31581a7 100644 (file)
@@ -356,7 +356,7 @@ if test "x$enable_wayland_backend" == "xyes"; then
   GIO_PACKAGE=gio-unix-2.0
   GDK_WINDOWING="$GDK_WINDOWING
 #define GDK_WINDOWING_WAYLAND"
-  WAYLAND_PACKAGES="wayland-client xkbcommon"
+  WAYLAND_PACKAGES="wayland-client xkbcommon wayland-egl"
   AM_CONDITIONAL(USE_WAYLAND, true)
 else
   AM_CONDITIONAL(USE_WAYLAND, false)
index 0696483b523e088f9ded2652cb0feae5882cced8..e39bcb003c7eb98f6e041a12b9981ed926b6729e 100644 (file)
@@ -29,7 +29,6 @@ libgdk_wayland_la_SOURCES =                   \
        gdkdisplaymanager-wayland.c             \
        gdkdnd-wayland.c                        \
        gdkeventsource.c                        \
-       gdkeventsource.h                        \
        gdkkeys-wayland.c                       \
        gdkscreen-wayland.c                     \
        gdkscreen-wayland.h                     \
index 468be5296be357909d232fcffc6b9b70d372f9d6..c633411c07e4b005b180b11529d79941837eaf99 100644 (file)
@@ -36,6 +36,8 @@
 #include "gdkwayland.h"
 #include <gdk-pixbuf/gdk-pixbuf.h>
 
+#include <sys/mman.h>
+
 #define GDK_TYPE_WAYLAND_CURSOR              (_gdk_wayland_cursor_get_type ())
 #define GDK_WAYLAND_CURSOR(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WAYLAND_CURSOR, GdkWaylandCursor))
 #define GDK_WAYLAND_CURSOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WAYLAND_CURSOR, GdkWaylandCursorClass))
@@ -51,6 +53,9 @@ struct _GdkWaylandCursor
   GdkCursor cursor;
   gchar *name;
   guint serial;
+  int x, y, width, height, size;
+  void *map;
+  struct wl_buffer *buffer;
 };
 
 struct _GdkWaylandCursorClass
@@ -78,6 +83,17 @@ gdk_wayland_cursor_get_image (GdkCursor *cursor)
   return NULL;
 }
 
+struct wl_buffer *
+_gdk_wayland_cursor_get_buffer (GdkCursor *cursor, int *x, int *y)
+{
+  GdkWaylandCursor *wayland_cursor = GDK_WAYLAND_CURSOR (cursor);
+
+  *x = wayland_cursor->x;
+  *y = wayland_cursor->y;
+
+  return wayland_cursor->buffer;
+}
+
 static void
 _gdk_wayland_cursor_class_init (GdkWaylandCursorClass *wayland_cursor_class)
 {
@@ -94,20 +110,171 @@ _gdk_wayland_cursor_init (GdkWaylandCursor *cursor)
 {
 }
 
-GdkCursor*
-_gdk_wayland_display_get_cursor_for_type (GdkDisplay    *display,
-                                         GdkCursorType  cursor_type)
+static void
+set_pixbuf (GdkWaylandCursor *cursor, GdkPixbuf *pixbuf)
 {
-  GdkWaylandCursor *private;
+  int stride, i, n_channels;
+  unsigned char *pixels, *end, *argb_pixels, *s, *d;
+
+  stride = gdk_pixbuf_get_rowstride(pixbuf);
+  pixels = gdk_pixbuf_get_pixels(pixbuf);
+  n_channels = gdk_pixbuf_get_n_channels(pixbuf);
+  argb_pixels = cursor->map;
+
+#define MULT(_d,c,a,t) \
+       do { t = c * a + 0x7f; _d = ((t >> 8) + t) >> 8; } while (0)
+
+  if (n_channels == 4)
+    {
+      for (i = 0; i < cursor->height; i++)
+       {
+         s = pixels + i * stride;
+         end = s + cursor->width * 4;
+         d = argb_pixels + i * cursor->width * 4;
+         while (s < end)
+           {
+             unsigned int t;
+
+             MULT(d[0], s[2], s[3], t);
+             MULT(d[1], s[1], s[3], t);
+             MULT(d[2], s[0], s[3], t);
+             d[3] = s[3];
+             s += 4;
+             d += 4;
+           }
+       }
+    }
+  else if (n_channels == 3)
+    {
+      for (i = 0; i < cursor->height; i++)
+       {
+         s = pixels + i * stride;
+         end = s + cursor->width * 3;
+         d = argb_pixels + i * cursor->width * 4;
+         while (s < end)
+           {
+             d[0] = s[2];
+             d[1] = s[1];
+             d[2] = s[0];
+             d[3] = 0xff;
+             s += 3;
+             d += 4;
+           }
+       }
+    }
+}
 
-  private = g_object_new (GDK_TYPE_WAYLAND_CURSOR,
-                          "cursor-type", GDK_CURSOR_IS_PIXMAP,
-                          "display", display,
-                          NULL);
-  private->name = NULL;
-  private->serial = theme_serial;
+static GdkCursor *
+create_cursor(GdkDisplayWayland *display, GdkPixbuf *pixbuf, int x, int y)
+{
+  GdkWaylandCursor *cursor;
+  struct wl_visual *visual;
+  int stride, fd;
+  char *filename;
+  GError *error = NULL;
+
+  cursor = g_object_new (GDK_TYPE_WAYLAND_CURSOR,
+                        "cursor-type", GDK_CURSOR_IS_PIXMAP,
+                        "display", display,
+                        NULL);
+  cursor->name = NULL;
+  cursor->serial = theme_serial;
+  cursor->x = x;
+  cursor->y = y;
+  cursor->width = gdk_pixbuf_get_width (pixbuf);
+  cursor->height = gdk_pixbuf_get_height (pixbuf);
+
+  stride = cursor->width * 4;
+  cursor->size = stride * cursor->height;
+
+  fd = g_file_open_tmp("wayland-shm-XXXXXX", &filename, &error);
+  if (fd < 0) {
+    fprintf(stderr, "g_file_open_tmp failed: %s\n", error->message);
+    g_error_free (error);
+    return NULL;
+  }
+
+  unlink (filename);
+  g_free (filename);
+
+  if (ftruncate(fd, cursor->size) < 0) {
+    fprintf(stderr, "ftruncate failed: %m\n");
+    close(fd);
+    return NULL;
+  }
+
+  cursor->map = mmap(NULL, cursor->size,
+                    PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+  if (cursor->map == MAP_FAILED) {
+    fprintf(stderr, "mmap failed: %m\n");
+    close(fd);
+    return NULL;
+  }
+
+  set_pixbuf (cursor, pixbuf);
+
+  visual = wl_display_get_premultiplied_argb_visual(display->wl_display);
+  cursor->buffer = wl_shm_create_buffer(display->shm,
+                                       fd,
+                                       cursor->width,
+                                       cursor->height,
+                                       stride, visual);
+
+  close(fd);
+
+  return GDK_CURSOR (cursor);
+}
 
-  return GDK_CURSOR (private);
+#define DATADIR "/usr/share/wayland"
+
+static const struct {
+  GdkCursorType type;
+  const char *filename;
+  int hotspot_x, hotspot_y;
+} cursor_definitions[] = {
+  { GDK_XTERM, DATADIR "/xterm.png", 15, 15 },
+  { GDK_BOTTOM_RIGHT_CORNER, DATADIR "/bottom_right_corner.png", 28, 28 }
+};
+
+GdkCursor *
+_gdk_wayland_display_get_cursor_for_type (GdkDisplay    *display,
+                                         GdkCursorType  cursor_type)
+{
+  GdkDisplayWayland *wayland_display;
+  GdkPixbuf *pixbuf;
+  GError *error = NULL;
+  int i;
+
+  for (i = 0; i < G_N_ELEMENTS (cursor_definitions); i++)
+    {
+      if (cursor_definitions[i].type == cursor_type)
+       break;
+    }
+
+  if (i == G_N_ELEMENTS (cursor_definitions))
+    return NULL;
+
+  wayland_display = GDK_DISPLAY_WAYLAND (display);
+  if (!wayland_display->cursors)
+    wayland_display->cursors =
+      g_new0 (GdkCursor *, G_N_ELEMENTS(cursor_definitions));
+  if (wayland_display->cursors[i])
+    return g_object_ref (wayland_display->cursors[i]);
+
+  pixbuf = gdk_pixbuf_new_from_file(cursor_definitions[i].filename, &error);
+  if (error != NULL)
+    {
+      g_error_free(error);
+      return NULL;
+    }
+
+  wayland_display->cursors[i] =
+    create_cursor(wayland_display, pixbuf,
+                 cursor_definitions[i].hotspot_x,
+                 cursor_definitions[i].hotspot_y);
+  g_object_unref (pixbuf);
+
+  return g_object_ref (wayland_display->cursors[i]);
 }
 
 GdkCursor*
index fcdc54bf74a18540629b7b8b47e5520af3c43846..c46ca1c29adba1386b7d4bb91f639118e06b7c07 100644 (file)
@@ -131,6 +131,19 @@ gdk_device_core_set_window_cursor (GdkDevice *device,
                                    GdkWindow *window,
                                    GdkCursor *cursor)
 {
+  GdkWaylandDevice *wd = GDK_DEVICE_CORE(device)->device;
+  struct wl_buffer *buffer;
+  int x, y;
+
+  if (cursor)
+    {
+      buffer = _gdk_wayland_cursor_get_buffer(cursor, &x, &y);
+      wl_input_device_attach(wd->device, wd->time, buffer, x, y);
+    }
+  else
+    {
+      wl_input_device_attach(wd->device, wd->time, NULL, 0, 0);
+    }
 }
 
 static void
index a8d4dd99d0645b9315d4e37a7f25dbf586a38288..ce631c062d88ffbca118bcb11efe1680574733bf 100644 (file)
@@ -46,6 +46,7 @@ struct _GdkWaylandDevice
   GdkWindow *keyboard_focus;
   struct wl_input_device *device;
   int32_t x, y, surface_x, surface_y;
+  uint32_t time;
 };
 
 struct _GdkDeviceCore
index d1543f9a70dabe914e70fe7dc78aedcab3cee2c6..5c9a3b348ec9e66c577e3fd6303ccb43c4541291 100644 (file)
@@ -26,9 +26,9 @@
 #include "gdkdevice-wayland.h"
 #include "gdkkeysyms.h"
 #include "gdkprivate-wayland.h"
-#include "gdkeventsource.h"
 
 #include <X11/extensions/XKBcommon.h>
+#include <X11/keysym.h>
 
 static void    gdk_device_manager_core_finalize    (GObject *object);
 
@@ -59,6 +59,7 @@ input_handle_motion(void *data, struct wl_input_device *input_device,
 
   event = gdk_event_new (GDK_NOTHING);
 
+  device->time = time;
   device->x = x;
   device->y = y;
   device->surface_x = sx;
@@ -89,6 +90,7 @@ input_handle_button(void *data, struct wl_input_device *input_device,
 
   fprintf (stderr, "button event %d, state %d\n", button, state);
 
+  device->time = time;
   event = gdk_event_new (state ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
   event->button.window = g_object_ref (device->pointer_focus);
   gdk_event_set_device (event, device->pointer);
@@ -120,6 +122,7 @@ input_handle_key(void *data, struct wl_input_device *input_device,
   struct xkb_desc *xkb;
   GdkKeymap *keymap;
 
+  device->time = time;
   event = gdk_event_new (state ? GDK_KEY_PRESS : GDK_KEY_RELEASE);
   event->key.window = g_object_ref (device->keyboard_focus);
   gdk_event_set_device (event, device->keyboard);
@@ -134,7 +137,7 @@ input_handle_key(void *data, struct wl_input_device *input_device,
   code = key + xkb->min_key_code;
 
   level = 0;
-  if (device->modifiers & ShiftMask &&
+  if (device->modifiers & XKB_COMMON_SHIFT_MASK &&
       XkbKeyGroupWidth(xkb, code, 0) > 1)
     level = 1;
 
@@ -216,6 +219,7 @@ input_handle_pointer_focus(void *data,
   GdkWaylandDevice *device = data;
   GdkEvent *event;
 
+  device->time = time;
   if (device->pointer_focus)
     {
       event = gdk_event_new (GDK_LEAVE_NOTIFY);
@@ -300,6 +304,7 @@ input_handle_keyboard_focus(void *data,
 
   fprintf (stderr, "keyboard focus surface %p\n", surface);
 
+  device->time = time;
   if (device->keyboard_focus)
     {
       event = gdk_event_new (GDK_FOCUS_CHANGE);
index 1b74068493aa4092b82823db0547b791841b501f..45184b0f00625e854e210ea9e792b68574aabeae 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
-#define EGL_EGLEXT_PROTOTYPES 1
-
 #include "config.h"
 
+#include <wayland-egl.h>
+
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
@@ -31,7 +31,6 @@
 #include "gdkwayland.h"
 #include "gdkdisplay.h"
 #include "gdkdisplay-wayland.h"
-#include "gdkeventsource.h"
 #include "gdkscreen.h"
 #include "gdkscreen-wayland.h"
 #include "gdkinternals.h"
@@ -40,8 +39,6 @@
 #include "gdkdevicemanager-wayland.h"
 #include "gdkkeysprivate.h"
 
-#include <wayland-egl.h>
-
 typedef struct _GdkEventTypeWayland GdkEventTypeWayland;
 
 struct _GdkEventTypeWayland
@@ -183,6 +180,8 @@ gdk_display_handle_global(struct wl_display *display, uint32_t id,
 
   if (strcmp(interface, "compositor") == 0) {
     display_wayland->compositor = wl_compositor_create(display, id);
+  } else if (strcmp(interface, "shm") == 0) {
+    display_wayland->shm = wl_shm_create(display, id);
   } else if (strcmp(interface, "shell") == 0) {
     display_wayland->shell = wl_shell_create(display, id);
     wl_shell_add_listener(display_wayland->shell,
@@ -212,7 +211,7 @@ gdk_display_init_egl(GdkDisplay *display)
   };
 
   display_wayland->egl_display =
-    eglGetDisplay((EGLNativeDisplayType) display_wayland->native_display);
+    eglGetDisplay(display_wayland->native_display);
   if (!eglInitialize(display_wayland->egl_display, &major, &minor)) {
     fprintf(stderr, "failed to initialize display\n");
     return FALSE;
@@ -300,8 +299,7 @@ _gdk_wayland_display_open (const gchar *display_name)
   gdk_input_init (display);
 
   g_signal_emit_by_name (display, "opened");
-  g_signal_emit_by_name (gdk_display_manager_get(),
-                        "display_opened", display);
+  g_signal_emit_by_name (gdk_display_manager_get(), "display_opened", display);
 
   return display;
 }
@@ -343,18 +341,6 @@ gdk_wayland_display_finalize (GObject *object)
   if (display_wayland->keymap)
     g_object_unref (display_wayland->keymap);
 
-  /* Atom Hashtable */
-  g_hash_table_destroy (display_wayland->atom_from_virtual);
-  g_hash_table_destroy (display_wayland->atom_to_virtual);
-
-  /* list of filters for client messages */
-  g_list_foreach (display_wayland->client_filters, (GFunc) g_free, NULL);
-  g_list_free (display_wayland->client_filters);
-
-  /* List of event window extraction functions */
-  g_slist_foreach (display_wayland->event_types, (GFunc)g_free, NULL);
-  g_slist_free (display_wayland->event_types);
-
   /* input GdkDevice list */
   g_list_foreach (display_wayland->input_devices, (GFunc) g_object_unref, NULL);
   g_list_free (display_wayland->input_devices);
@@ -370,9 +356,6 @@ gdk_wayland_display_finalize (GObject *object)
 
   g_free (display_wayland->startup_notification_id);
 
-  /* X ID hashtable */
-  g_hash_table_destroy (display_wayland->xid_ht);
-
   G_OBJECT_CLASS (_gdk_display_wayland_parent_class)->finalize (object);
 }
 
@@ -464,9 +447,7 @@ gdk_wayland_display_get_default_group (GdkDisplay *display)
 static gboolean
 gdk_wayland_display_supports_selection_notification (GdkDisplay *display)
 {
-  GdkDisplayWayland *display_wayland = GDK_DISPLAY_WAYLAND (display);
-
-  return display_wayland->have_xfixes;
+  return TRUE;
 }
 
 static gboolean
@@ -495,13 +476,13 @@ gdk_wayland_display_store_clipboard (GdkDisplay    *display,
 static gboolean
 gdk_wayland_display_supports_shapes (GdkDisplay *display)
 {
-  return GDK_DISPLAY_WAYLAND (display)->have_shapes;
+  return TRUE;
 }
 
 static gboolean
 gdk_wayland_display_supports_input_shapes (GdkDisplay *display)
 {
-  return GDK_DISPLAY_WAYLAND (display)->have_input_shapes;
+  return TRUE;
 }
 
 static gboolean
index d7de0f0832244288069962c44d739325f0ea6fb8..ebe67d648002c45fea9b9c407c30ccd7fd91faf7 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <stdint.h>
 #include <wayland-client.h>
+#include <wayland-egl.h>
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
 #include <GL/gl.h>
@@ -60,61 +61,12 @@ struct _GdkDisplayWayland
   gint grab_count;
 
   /* Keyboard related information */
-
-  gint xkb_event_type;
-  gboolean use_xkb;
-  
-  /* Whether we were able to turn on detectable-autorepeat using
-   * XkbSetDetectableAutorepeat. If FALSE, we'll fall back
-   * to checking the next event with XPending(). */
-  gboolean have_xkb_autorepeat;
-
   GdkKeymap *keymap;
   guint            keymap_serial;
 
-  gboolean have_xfixes;
-  gint xfixes_event_base;
-
-  gboolean have_xcomposite;
-  gboolean have_xdamage;
-  gint xdamage_event_base;
-
-  gboolean have_randr13;
-  gint xrandr_event_base;
-
-  /* If the SECURITY extension is in place, whether this client holds 
-   * a trusted authorization and so is allowed to make various requests 
-   * (grabs, properties etc.) Otherwise always TRUE. */
-  gboolean trusted_client;
-
   /* drag and drop information */
   GdkDragContext *current_dest_drag;
 
-  /* data needed for MOTIF DnD */
-
-  Window motif_drag_window;
-  GdkWindow *motif_drag_gdk_window;
-  GList **motif_target_lists;
-  gint motif_n_target_lists;
-
-  /* Mapping to/from virtual atoms */
-
-  GHashTable *atom_from_virtual;
-  GHashTable *atom_to_virtual;
-
-  /* list of filters for client messages */
-  GList *client_filters;
-
-  /* List of functions to go from extension event => X window */
-  GSList *event_types;
-  
-  /* X ID hashtable */
-  GHashTable *xid_ht;
-
-  /* translation queue */
-  GQueue *translate_queue;
-
-  /* Input device */
   /* input GdkDevice list */
   GList *input_devices;
 
@@ -127,16 +79,6 @@ struct _GdkDisplayWayland
   /* Time of most recent user interaction. */
   gulong user_time;
 
-  /* Sets of atoms for DND */
-  guint base_dnd_atoms_precached : 1;
-  guint xdnd_atoms_precached : 1;
-  guint motif_atoms_precached : 1;
-  guint use_sync : 1;
-
-  guint have_shapes : 1;
-  guint have_input_shapes : 1;
-  gint shape_event_base;
-
   /* The offscreen window that has the pointer in it (if any) */
   GdkWindow *active_offscreen_window;
 
@@ -144,6 +86,7 @@ struct _GdkDisplayWayland
   struct wl_display *wl_display;
   struct wl_egl_display *native_display;
   struct wl_compositor *compositor;
+  struct wl_shm *shm;
   struct wl_shell *shell;
   struct wl_output *output;
   struct wl_input_device *input_device;
@@ -152,6 +95,8 @@ struct _GdkDisplayWayland
   EGLContext egl_context;
   cairo_device_t *cairo_device;
 
+  GdkCursor **cursors;
+
   PFNGLEGLIMAGETARGETTEXTURE2DOESPROC image_target_texture_2d;
   PFNEGLCREATEIMAGEKHRPROC create_image;
   PFNEGLDESTROYIMAGEKHRPROC destroy_image;
@@ -163,8 +108,6 @@ struct _GdkDisplayWaylandClass
 };
 
 GType      _gdk_display_wayland_get_type            (void);
-GdkScreen *_gdk_wayland_display_screen_for_xrootwin (GdkDisplay *display,
-                                                    Window      xrootwin);
 
 G_END_DECLS
 
index 553cc35804365e185796257a5d34c9d96990bbc6..b48e88010766bb9b97e0baf691d2cc074074e086 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "config.h"
 
-#include "gdkeventsource.h"
 #include "gdkinternals.h"
+#include "gdkprivate-wayland.h"
 
 typedef struct _GdkWaylandEventSource {
   GSource source;
diff --git a/gdk/wayland/gdkeventsource.h b/gdk/wayland/gdkeventsource.h
deleted file mode 100644 (file)
index 65a7ca3..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 2009 Carlos Garnacho <carlosg@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GDK_EVENT_SOURCE_H__
-#define __GDK_EVENT_SOURCE_H__
-
-#include "gdkprivate-wayland.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GdkEventSource GdkEventSource;
-
-G_GNUC_INTERNAL
-GSource * gdk_event_source_new            (GdkDisplay *display);
-
-G_GNUC_INTERNAL
-void      gdk_event_source_select_events  (GdkEventSource *source,
-                                           Window          window,
-                                           GdkEventMask    event_mask,
-                                           unsigned int    extra_x_mask);
-
-G_GNUC_INTERNAL
-void      _gdk_deliver_event (GdkDisplay *display, GdkEvent *event);
-
-
-G_END_DECLS
-
-#endif /* __GDK_EVENT_SOURCE_H__ */
index bc5c6ed3936ebb125428511ee2b061fdce98aea7..da215a121d5cd9a41829eca4d13a1ca2d14fa7c6 100644 (file)
@@ -67,6 +67,10 @@ void       _gdk_wayland_display_get_maximal_cursor_size (GdkDisplay *display,
 gboolean   _gdk_wayland_display_supports_cursor_alpha (GdkDisplay *display);
 gboolean   _gdk_wayland_display_supports_cursor_color (GdkDisplay *display);
 
+struct wl_buffer *_gdk_wayland_cursor_get_buffer (GdkCursor *cursor,
+                                                 int       *x,
+                                                 int       *y);
+
 GdkDragProtocol _gdk_wayland_window_get_drag_protocol (GdkWindow *window,
                                                       GdkWindow **target);
 
index 09adafbb637a9302045426dcadb12b9ba484febe..e7dbaba0acc9853824b4a4c763884fe11447c5e2 100644 (file)
@@ -53,8 +53,6 @@ struct _GdkScreenWayland
   int width_mm, height_mm;
 
   /* Window manager */
-  long last_wmspec_check_time;
-  Window wmspec_check_window;
   char *window_manager_name;
   /* TRUE if wmspec_check_window has changed since last
    * fetch of _NET_SUPPORTED
@@ -99,7 +97,6 @@ struct _GdkScreenWaylandClass
 struct _GdkWaylandMonitor
 {
   GdkRectangle  geometry;
-  XID          output;
   int          width_mm;
   int          height_mm;
   char *       output_name;
@@ -117,7 +114,6 @@ init_monitor_geometry (GdkWaylandMonitor *monitor,
   monitor->geometry.width = width;
   monitor->geometry.height = height;
 
-  monitor->output = None;
   monitor->width_mm = -1;
   monitor->height_mm = -1;
   monitor->output_name = NULL;
@@ -173,8 +169,6 @@ gdk_wayland_screen_dispose (GObject *object)
     _gdk_window_destroy (screen_wayland->root_window, TRUE);
 
   G_OBJECT_CLASS (_gdk_screen_wayland_parent_class)->dispose (object);
-
-  screen_wayland->wmspec_check_window = None;
 }
 
 static void
@@ -511,7 +505,6 @@ _gdk_wayland_screen_new (GdkDisplay *display)
 
   screen_wayland = GDK_SCREEN_WAYLAND (screen);
   screen_wayland->display = display;
-  screen_wayland->wmspec_check_window = None;
   /* we want this to be always non-null */
   screen_wayland->window_manager_name = g_strdup ("unknown");
 
index 419ba046e58f45cfdc352b34221b219316185986..d0cd39e954719f5d171c840aac34bd33b94c9ba1 100644 (file)
@@ -34,7 +34,6 @@
 #include "gdkwindow-wayland.h"
 #include "gdkdeviceprivate.h"
 #include "gdkdevice-wayland.h"
-#include "gdkeventsource.h"
 
 #include <stdlib.h>
 #include <stdio.h>
index 73d7ec61bafa4d2e74dc847481b3aeaff24d9625..5b63f88b1991ce1d42c9178405b2a694fe43cc75 100644 (file)
@@ -32,6 +32,7 @@
 
 #include <stdint.h>
 #include <wayland-client.h>
+#include <wayland-egl.h>
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
 #include <GL/gl.h>
@@ -82,12 +83,6 @@ struct _GdkToplevelWayland
 
   /* Time of most recent user interaction. */
   gulong user_time;
-
-  /* We use an extra X window for toplevel windows that we XSetInputFocus()
-   * to in order to avoid getting keyboard events redirected to subwindows
-   * that might not even be part of this app
-   */
-  Window focus_window;
 };
 
 GType               _gdk_window_impl_wayland_get_type  (void);